﻿using System.ComponentModel;
using System.Drawing;

namespace Rsdn.Scintilla
{
	partial class ScintillaEditor
	{
		private const string _caretCategory = "Caret";

		/// <summary>
		/// Цвет текстового курсора
		/// </summary>
		[DefaultValue(typeof(Color), "black")]
		[Category(_caretCategory)]
		public Color CaretColor
		{
			get { return EditorColor2Color(SendEditor(ScintillaCommand.SCI_GETCARETFORE)); }
			set { SendEditor(ScintillaCommand.SCI_SETCARETFORE, Color2EditorColor(value)); }
		}

		/// <summary>
		/// Подсветка фона линии, в которой находится текстовый курсор
		/// </summary>
		[DefaultValue(false)]
		[Category(_caretCategory)]
		public bool CaretLineVisible
		{
			get { return SendEditor(ScintillaCommand.SCI_GETCARETLINEVISIBLE) != 0; }
			set { SendEditor(ScintillaCommand.SCI_SETCARETLINEVISIBLE, value); }
		}

		/// <summary>
		/// Цвет фона линии, в которой находится текстовый курсор
		/// </summary>
		[DefaultValue(typeof(Color), "yellow")]
		[Category(_caretCategory)]
		public Color CaretLineColor
		{
			get { return EditorColor2Color(SendEditor(ScintillaCommand.SCI_GETCARETLINEBACK)); }
			set { SendEditor(ScintillaCommand.SCI_SETCARETLINEBACK, Color2EditorColor(value)); }
		}

		/// <summary>
		/// Период мигания текстового курсора, мс
		/// </summary>
		[Category(_caretCategory)]
		[DefaultValue(500)]
		public int CaretBlinkingPeriod
		{
			get { return SendEditor(ScintillaCommand.SCI_GETCARETPERIOD); }
			set { SendEditor(ScintillaCommand.SCI_SETCARETPERIOD, value); }
		}

		/// <summary>
		/// Ширина текстового курсора в пикселях
		/// </summary>
		/// <remarks>Допустимы значения 0, 1, 2 и 3. 0 означает 
		/// невидимый курсор</remarks>
		[DefaultValue(1)]
		[Category(_caretCategory)]
		public int CaretWidth
		{
			get { return SendEditor(ScintillaCommand.SCI_GETCARETWIDTH); }
			set { SendEditor(ScintillaCommand.SCI_SETCARETWIDTH, value); }
		}

		/// <summary>
		/// Позиция текстового курсора
		/// </summary>
		[Browsable(false)]
		public int CaretPosition
		{
			get { return SendEditor(ScintillaCommand.SCI_GETCURRENTPOS); }
			set
			{
				SendEditor(ScintillaCommand.SCI_SETCURRENTPOS, value);
				Selection.Start = value;
			}
		}

		/// <summary>
		/// Текущая строка
		/// </summary>
		[Browsable(false)]
		public int CurrentLine
		{
			get { return SendEditor(ScintillaCommand.SCI_LINEFROMPOSITION, CaretPosition); }
		}

		/// <summary>
		/// Выполнить скроллинг до позиции каретки.
		/// </summary>
		public void ScrollToCaret()
		{
			SendEditor(ScintillaCommand.SCI_SCROLLCARET);
		}
	}
}
